package com.nuc.zyt.day02.Proxy.staticProxy;

import com.nuc.zyt.day02.Proxy.Eat;
import com.nuc.zyt.day02.Proxy.Person;

/**
 * @ClassName StaticProxy
 * @Description TODO
 * @Author 耀酱
 * @Date 2023/5/15 11:11
 * @Version 1.0
 */
/**
 * 静态代理的优点：可以在不修改目标对象的前提下，对目标对象进行功能的扩展和拦截。但是它也仅仅解决了上一种方案4大缺点中的第1、4两点：
 * ● 直接修改源程序，不符合开闭原则，即好的程序设计应该对扩展开放，对修改关闭（✅，如果一开始就面向接口编程，这一步其实是不需要的）
 * ● 如果Calculator类内部有几十个、上百个方法，修改量太大（❎，目标类有多少个方法，代理类就要重写多少个方法）
 * ● 存在重复代码（都是在核心代码前后打印日志）（❎，代理类中的日志代码是重复的）
 * ● 日志打印硬编码在代理类中，不利于后期维护：比如你花了一上午终于写完了，组长告诉你这个功能不做了（✅，别用代理类就好了）
 */

public class StaticProxy implements Eat {
    private Person person;

    public StaticProxy(Person person){
        this.person = person;
    }

    @Override
    public void eat() {
        // 方法前执行的操作
        System.out.println("eat方法前执行........");
        person.eat();
        // 方法后执行操作
        System.out.println("eat方法后执行.........");
    }
}
